﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace StandAlone
{
    public partial class frm_Articulos : Form
    {
        bool flag = false;
        public frm_Articulos()
        {
            InitializeComponent();
        }
        private void frm_Articulos_Load(object sender, EventArgs e)
        {
            Cargar_Articulos();
        }

        private void cmb_Articulos_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmb_Articulos.SelectedIndex != -1)
            {
                CargarEnTextBoxs();
                if(cmb_Marcas.Items.Count == 0)
                    Cargar_Marcas();
                EstablecerIndexMarcas();
            }
        }

        private void CargarEnTextBoxs()
        {
            DataSet ds = new DataSet( );
            string Id_Articulo = cmb_Articulos.SelectedValue.ToString();

            string Consulta = "SELECT Id_Articulo as Id, Id_Marca as Id_Marca, Articulo as Articulo, Stock as Stock, PrecioUnitario as Precio_Unitario, "
                            + "Eliminado as Eliminado FROM Articulos WHERE Id_Articulo = '" + Id_Articulo + "'";

            ds = Funciones.Read_DataBase(Consulta);

            txt_Id.Text = ds.Tables[0].Rows[0]["Id"].ToString();
            txt_Id_Marca.Text = ds.Tables[0].Rows[0]["Id_Marca"].ToString();
            txt_Articulo.Text = ds.Tables[0].Rows[0]["Articulo"].ToString();
            txt_Stock.Text = ds.Tables[0].Rows[0]["Stock"].ToString();
            txt_Precio_Unitario.Text = ds.Tables[0].Rows[0]["Precio_Unitario"].ToString();

            if (ds.Tables[0].Rows[0]["Eliminado"].ToString() == "True")
                chkb_Eliminado.Checked = true;
            else
                chkb_Eliminado.Checked = false;
        }

        private void btn_Agregar_Nuevo_Articulo_Click(object sender, EventArgs e)
        {
            cmb_Articulos.SelectedIndex = -1;
            cmb_Articulos.Enabled = false;
            cmb_Marcas.SelectedIndex = -1;
            btn_Agregar_Nuevo_Articulo.Enabled = false;
            Cargar_Cod_Articulo_Nuevo();
            Limpiar_Formulario();
        }

        private void Cargar_Cod_Articulo_Nuevo()
        {
            string Cod_Articulo;
            int Cod_Articulo_Numerico;
            DataSet ds = new DataSet();
            ds = Funciones.Read_DataBase("SELECT MAX(Id_Articulo) as Id_Articulo FROM Articulos");
            Cod_Articulo = ds.Tables[0].Rows[0]["Id_Articulo"].ToString().Trim();
            Cod_Articulo = Cod_Articulo.Remove(0, 1);
            Cod_Articulo_Numerico = Convert.ToInt32(Cod_Articulo.Trim());
            Cod_Articulo_Numerico++;
            Cod_Articulo = Cod_Articulo_Numerico.ToString().PadLeft(4, '0');
            txt_Id.Text = 'A' + Cod_Articulo;
        }

        private void Limpiar_Formulario()
        {
            chkb_Eliminado.Checked = false;
            txt_Id_Marca.Text = "";
            txt_Articulo.Text = "";
            txt_Stock.Text = "";
            txt_Precio_Unitario.Text = "";
        }

        private bool Buscar_Si_Existe_Articulo()
        {
            DataSet ds = new DataSet();
            ds = Funciones.Read_DataBase("SELECT Count (Id_Articulo) AS Cantidad_Articulos FROM Articulos"
                        + " WHERE Articulos.Id_Articulo = '" + txt_Id.Text + "'");
            if (Convert.ToInt32(ds.Tables[0].Rows[0]["Cantidad_Articulos"].ToString().Trim()) == 0)
                return false;
            else
                return true;
        }

        private void Agregar_Registro()
        {
            Funciones.Insert_DataBase("INSERT INTO Articulos (Id_Articulo, Id_Marca, Articulo, Stock,"
                    + " PrecioUnitario, Eliminado)"
                    + " SELECT '" + txt_Id.Text.Trim() + "','" + txt_Id_Marca.Text.Trim() + "','" + txt_Articulo.Text.Trim() + "','" + txt_Stock.Text.ToString().Replace(',', '.')
                    + "','" + txt_Precio_Unitario.Text.ToString().Replace(',', '.') + "', " + Convert.ToInt32(chkb_Eliminado.Checked));
           
            //foreach (ComboBoxItem item in cmb_Proveedor_Cargado.Items)
            //{
            //    DataSet ds = new DataSet();
            //    string Id_Proveedor = item.Name.ToString();
            //    string consulta = "INSERT INTO Proveedores_x_Articulos (Id_Proveedor, Id_Articulo"
            //        + " Costo, Eliminado)"
            //        + " SELECT " + "'" + Id_Proveedor + "'" + ", " + txt_Id
            //        + ", " + "'" + txt_Costo + "'" + ", " + Convert.ToInt32(chkb_Proveedor_Deshabilitado_Compra.Checked);
            //    Funciones.Insert_DataBase(consulta);
            //}
        }

        private void Actualizar_Registro()
        {
            Funciones.Insert_DataBase("UPDATE Articulos SET Id_Articulo ='" + txt_Id.Text.Trim() + "', Id_Marca='"
                    + txt_Id_Marca.Text.Trim() + "', Articulo='" + txt_Articulo.Text.Trim() + "', Stock='" + txt_Stock.Text.ToString().Replace(',', '.')
                    + "', PrecioUnitario='" + txt_Precio_Unitario.Text.ToString().Replace(',', '.') + "', Eliminado=" + Convert.ToInt32(chkb_Eliminado.Checked) 
                    + " WHERE Id_Articulo ='" + txt_Id.Text.Trim() + "'");
        }

        private void Cargar_Articulos()
        {
            Funciones.Cargar_Combo("SELECT Id_Articulo, Articulo as Articulo FROM Articulos", "Id_Articulo", "Articulo", ref cmb_Articulos);
        }
        private void Cargar_Marcas()
        {
            flag = true;
            Funciones.Cargar_Combo("SELECT Id_Marca, Marca as Marca FROM Marcas WHERE Eliminado = 0", "Id_Marca", "Marca", ref cmb_Marcas);
            flag = false;
        }

        private void btn_Cancelar_Click(object sender, EventArgs e)
        {
            cmb_Articulos.Enabled = true;
            btn_Agregar_Nuevo_Articulo.Enabled = true;
            cmb_Articulos.SelectedIndex = 0;
        }

        private void btn_Actualizar_Cambios_Click(object sender, EventArgs e)
        {
            if (Validar_Campos() == true)
            {
                if (Buscar_Si_Existe_Articulo() == false)
                {
                    // NO EXISTE COD ARTICULO, SE CARGA NUEVO REGISTRO
                    Agregar_Registro();
                    MessageBox.Show("Articulo Agregado con Éxito", "Agregar Nuevo Articulo", MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                    Limpiar_Formulario();
                    cmb_Articulos.Enabled = true;
                    cmb_Articulos.SelectedIndex = -1;
                    btn_Agregar_Nuevo_Articulo.Enabled = true;
                    Cargar_Articulos();
                }
                else
                {
                    // EXISTE COD CLIENTE, SE ACTUALIZA REGISTRO
                    Actualizar_Registro();
                    MessageBox.Show("Articulo Actualizado con Éxito", "Actualizar Articulo", MessageBoxButtons.OK,
                        MessageBoxIcon.Information);
                    Limpiar_Formulario();
                    cmb_Articulos.SelectedIndex = -1;
                    Cargar_Articulos();
                }
            }
        }

        private bool Validar_Campos()
        {
            //Devuelve true si se Ingresaron todos los campos que no admiten Nulos
            if (txt_Articulo.Text.Trim() == "")
            {
                MessageBox.Show("No ingresó Artículo", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return false;
            }
           
            if (txt_Id_Marca.Text.Trim() == "")
            {
                MessageBox.Show("No ingresó Id de Marca", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return false;
            }
            
            if (txt_Stock.Text.Trim() == "")
            {
                MessageBox.Show("No ingresó Stock", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return false;
            }
            
            if (txt_Precio_Unitario.Text.Trim() == "")
            {
                MessageBox.Show("No ingresó Precio Unitario", "Error", MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
                return false;
            }
           
            return true;
        }

        private void txt_Stock_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
            // Numeros 0 - 9
            if ((e.KeyChar >= 48) && (e.KeyChar <= 57))
                e.Handled = false;
            // BackSpace
            if (e.KeyChar == 8)
                e.Handled = false;
        }

        private void txt_Precio_Unitario_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
            // Numeros 0 - 9
            if ((e.KeyChar >= 48) && (e.KeyChar <= 57))
                e.Handled = false;
            // BackSpace
            if (e.KeyChar == 8)
                e.Handled = false;
            // Coma
            if (e.KeyChar == 44)
                e.Handled = false;
        }

        private void btn_Proveedores_Click(object sender, EventArgs e)
        {
            frm_Articulos_Proveedores up = new frm_Articulos_Proveedores();
            frm_Articulos_Proveedores.Id_Articulo = cmb_Articulos.SelectedValue.ToString().Trim();
            frm_Articulos_Proveedores.Articulo = cmb_Articulos.Text.ToString().Trim();
            up.ShowDialog();
        }

        private void EstablecerIndexMarcas()
        {
            flag = true;
            int total= cmb_Marcas.Items.Count;
            cmb_Marcas.SelectedIndex = 0;
            for(int i = 0; i<total;i++)
            {
                if (txt_Id_Marca.Text.ToString().Trim() == cmb_Marcas.SelectedValue.ToString().Trim())
                {
                    flag = false;
                    return;
                }
                cmb_Marcas.SelectedIndex ++;
            }
            flag = false;
        }

        private void cmb_Marcas_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cmb_Marcas.SelectedIndex != -1 && flag == false)
            {
                txt_Id_Marca.Text = cmb_Marcas.SelectedValue.ToString().Trim();
            }
        }

        private void btn_Cerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}